import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

/**
 * 阻塞队列测试
 */
public class BlockingQueueTest {

	public static void main(String[] args) {
		//长度为3的阻塞队列
		final BlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(3);
		//两个放数据的线程
		for(int i=0;i<2;i++){
			new Thread(new Runnable(){
				public void run() {
					while(true){//循环放数据
						try {
							Thread.sleep((long)(Math.random()*1000));
							System.out.println(Thread.currentThread().getName() + "准备放数据!");	
							queue.put(1);
							System.out.println(Thread.currentThread().getName() + "已经放了数据，" + 							
									"队列目前有" + queue.size() + "个数据");
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				}
			}).start();
		}
		//一个取数据的线程
		new Thread(new Runnable(){
			public void run() {
				while(true){//循环取数据
					try {
						//将此处的睡眠时间分别改为100和1000，观察运行结果
						Thread.sleep(100);
						System.out.println(Thread.currentThread().getName() + "准备取数据!");
						queue.take();
						System.out.println(Thread.currentThread().getName() + "已经取走数据，" + 							
								"队列目前有" + queue.size() + "个数据");				
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
	}

}
